/*
 * Copyright 2011 Philippe Blanc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package me.l1k3.fx.client.engine.inter;

import me.l1k3.fx.client.channel.inter.Channel;
import me.l1k3.fx.client.engine.easing.Easing;

public interface FXEngine {
    public final static String REGEX_CUBIC_BEZIER = "cubic-bezier\\(\\s*([-+]?[0-9]*\\.?[0-9]+)\\s*,\\s*([-+]?[0-9]*\\.?[0-9]+)\\s*,\\s*([-+]?[0-9]*\\.?[0-9]+)\\s*,\\s*([-+]?[0-9]*\\.?[0-9]+)\\s*\\)";

    public final static String EASE = "ease";
    public final static String LINEAR = "linear";
    public final static String EASE_IN = "ease-in";
    public final static String EASE_OUT = "ease-out";
    public final static String EASE_IN_OUT = "ease-in-out";

    public final static String JS = "js";
    public final static String CSS3 = "css3";
    
	public abstract void setFX(FXEngineConnector fx);
	public abstract void unsetFX(FXEngineConnector fx);
	public abstract FXEngineConnector getFX();
	public abstract void setEasing(String easing) throws Easing.EasingNotSupportedException;
	public abstract void setEasing(Easing easing) throws Easing.EasingNotSupportedException;
	public abstract void setEasing(double x1, double y1, double x2, double y2);
	public abstract String getEasing();
	public abstract boolean validateChannel(Channel channel);
	public abstract void cancel();
	public abstract void run(int duration);
	public abstract void run(int duration, int delay);
	public abstract void hookFire(int duration);
}